package listener;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import bean.remote.ArticuloRemoto;
import bean.remote.ConfiguracionRemote;
import bean.remote.MQRemote;
import bean.remote.SolicitudArticuloRemote;
import dominio.Articulo;
import dominio.ArticuloItem;
import dominio.Configuracion;
import dominio.Electrodomestico;
import dominio.Infantil;
import dominio.MQ;
import dominio.Moda;
import dominio.ModuleType;
import dominio.Mueble;
import dominio.SolicitudArticulo;

public class InitialData implements ServletContextListener {

	@EJB(beanName = "mqBean")
	private MQRemote mqBean;

	@EJB(beanName = "articuloBean")
	private ArticuloRemoto articuloRemoto;

	@EJB(beanName = "configuracionBean")
	private ConfiguracionRemote configuracionRemoto;

	@EJB(beanName = "solicitudArticuloBean")
	private SolicitudArticuloRemote solicitudArticuloBean;

	private Articulo articulo1;
	private Articulo articulo2;

	@Override
	public void contextInitialized(ServletContextEvent contextEvent) {
		cargarLog4j(contextEvent);
		//Descomentar si es que no tenemos el scrip de la base de datos
		mqParametrizadas();
		configuracionesIniciales();
//		crearArticulosIniciales();
//		crearSolicitudes();
	}

	private void cargarLog4j(ServletContextEvent contextEvent) {
		Logger logger = null;
		ServletContext servletContext = contextEvent.getServletContext();
		String log4jFile = servletContext.getInitParameter("log4jFileName");
		String fullPath = servletContext.getRealPath("") + File.separator
				+ log4jFile;
		PropertyConfigurator.configure(fullPath);
		logger = LogManager.getLogger(InitialData.class.getName());
		logger.info("Cargando log4j: " + fullPath);
	}

	@Override
	public void contextDestroyed(ServletContextEvent servletContextEvent) {
	}

	private void mqParametrizadas() {
		MQ mqDespacho = new MQ(ModuleType.DESPACHO,
				"jms/queue/nuevosArticulos", "jms/RemoteConnectionFactory",
				"despacho", "despacho123", "4447");

		MQ mqLogistica = new MQ(ModuleType.LOGISTICA, "jms/queue/log",
				"jms/RemoteConnectionFactory", "log", "log1234", "4447");

		MQ mqPortal = new MQ(ModuleType.PORTAL, "jms/queue/deposito",
				"jms/RemoteConnectionFactory", "deposito", "deposito123",
				"4447");

		MQ mqDeposito = new MQ(ModuleType.DEPOSITO,
				"jms/queue/deposito/receive", "jms/RemoteConnectionFactory",
				"test1", "test12341", "4447");

		mqBean.crear(mqPortal);
		mqBean.crear(mqDespacho);
		mqBean.crear(mqLogistica);
		mqBean.crear(mqDeposito);
	}

	private void configuracionesIniciales() {
		Configuracion configuracion1 = new Configuracion(0, 1L,
				ModuleType.PORTAL, "localhost", 1);

		Configuracion configuracion2 = new Configuracion(0, 2L,
				ModuleType.PORTAL, "localhost", 0);

		Configuracion configuracion3 = new Configuracion(0, 3L,
				ModuleType.PORTAL, "localhost", 0);

		Configuracion configuracion4 = new Configuracion(0, 4L,
				ModuleType.PORTAL, "localhost", 0);

		// Configuracion configuracion6 = new Configuracion(0, 6L,
		// ModuleType.DEPOSITO, "localhost", 1);

		Configuracion configuracion7 = new Configuracion(0, 7L,
				ModuleType.PORTAL, "localhost", 0);

		// Configuracion configuracion8 = new Configuracion(0, 8L,
		// ModuleType.DEPOSITO, "localhost", 1);

		// Configuracion configuracion9 = new Configuracion(0, 9L,
		// ModuleType.DEPOSITO, "localhost", 1);

		Configuracion configuracion10 = new Configuracion(0, 10L,
				ModuleType.PORTAL, "localhost", 0);

		Configuracion configuracion11 = new Configuracion(0, 11L,
				ModuleType.DEPOSITO, "localhost", 1);

		Configuracion configuracion12 = new Configuracion(0, 12L,
				ModuleType.DESPACHO, "localhost", 1);

		Configuracion configuracion13 = new Configuracion(0, 13L,
				ModuleType.DESPACHO, "localhost", 0);

		Configuracion configuracion14 = new Configuracion(0, 14L,
				ModuleType.DESPACHO, "localhost", 0);

		Configuracion configuracion15 = new Configuracion(0, 15L,
				ModuleType.LOGISTICA, "localhost", 0);

		Configuracion configuracion16 = new Configuracion(0, 16L,
				ModuleType.DESPACHO, "localhost", 0);

		Configuracion configuracion17 = new Configuracion(0, 17L,
				ModuleType.LOGISTICA, "localhost", 1);

		configuracionRemoto.crear(configuracion1);
		configuracionRemoto.crear(configuracion2);
		configuracionRemoto.crear(configuracion3);
		configuracionRemoto.crear(configuracion4);
		// configuracionRemoto.crear(configuracion6);
		configuracionRemoto.crear(configuracion7);
		// configuracionRemoto.crear(configuracion8);
		// configuracionRemoto.crear(configuracion9);
		configuracionRemoto.crear(configuracion10);
		configuracionRemoto.crear(configuracion11);
		configuracionRemoto.crear(configuracion12);
		configuracionRemoto.crear(configuracion13);
		configuracionRemoto.crear(configuracion14);
		configuracionRemoto.crear(configuracion15);
		configuracionRemoto.crear(configuracion16);
		configuracionRemoto.crear(configuracion17);
	}

	private void crearArticulosIniciales() {
		Electrodomestico heladera = new Electrodomestico("Heladera",
				"Linda la heladera", "GAFA", 4000F, "", "Argentina", 10, "");
		Electrodomestico lavarropas = new Electrodomestico("Lavarropas",
				"que bien que lava", "Wirlpool", 4500F, "", "Brasil", 10, "");

		Infantil batman = new Infantil("Batman", "juguete de batman", "toys",
				250F, "", "China", 10, "3-10");
		Infantil playMobil = new Infantil("Play mobil Barco", "Barco pirata",
				"lolay", 1250F, "", "China", 10, "5-14");

		Moda jean = new Moda("Jean 501", "modelo unico color blanco", "levis",
				700F, "", "Taiwan", 10, "Blanco", "42");
		Moda camisa = new Moda("Camisa de jean", "color jean", "", 500F,
				"levis", "Argentina", 10, "Blanco", "32");

		Mueble sillon = new Mueble("sillon", "color negro", "", 2500F, "",
				"Argentina", 10, "Madera");
		Mueble mesa = new Mueble("mesa", "color madera", "", 4500F, "",
				"Argentina", 10, "Watambu");

		articulo1 = articuloRemoto.crear(heladera, false);
		articuloRemoto.crear(lavarropas, false);

		articulo2 = articuloRemoto.crear(batman, false);
		articuloRemoto.crear(playMobil, false);

		articuloRemoto.crear(jean, false);
		articuloRemoto.crear(camisa, false);

		articuloRemoto.crear(sillon, false);
		articuloRemoto.crear(mesa, false);
	}

	private void crearSolicitudes() {

		SolicitudArticulo solicitudArticulo = new SolicitudArticulo(1L, 1L);
		List<ArticuloItem> a = new ArrayList<ArticuloItem>();
		a.add(new ArticuloItem(articulo1.getCodigo(), 20, solicitudArticulo));
		a.add(new ArticuloItem(articulo2.getCodigo(), 10, solicitudArticulo));
		solicitudArticulo.setArticulosItems(a);

		// hay problema con el estado!
		this.solicitudArticuloBean.cargar(solicitudArticulo);

	}

}
